package main

import "fmt"

func main() {
	// // map是引用类型数据，key-value数据类型，无序，默认值nil
	// // 1. make创建map类型的数据
	// // make(map[键类型]值类型, [长度])
	// var userinfo = make(map[string]string)
	// userinfo["username"] = "张三"
	// userinfo["age"] = "20"
	// userinfo["sex"] = "男"
	// fmt.Println(userinfo)
	// fmt.Println(userinfo["age"])

	// // 声明的同时填充值
	// var userinfo = map[string]string{
	// 	"username": "张三",
	// 	"age":      "20",
	// 	"sex":      "男",
	// }
	// fmt.Println(userinfo)
	// fmt.Println(userinfo["age"])

	// // for range循环遍历map类型数据
	// var userinfo = map[string]string{
	// 	"username": "张三",
	// 	"age":      "20",
	// 	"sex":      "男",
	// }
	// for k, v := range userinfo {
	// 	fmt.Printf("key:%v value:%v\n", k, v)
	// }

	// //map类型数据CURD

	// var userinfo = make(map[string]string)

	// // 新增(Create),修改(Update)
	// userinfo["username"] = "张三"
	// userinfo["age"] = "20"
	// userinfo["age"] = "30"

	// // 获取(Retrieve)
	// age, ok := userinfo["age1"]
	// fmt.Println(age, ok)
	// username := userinfo["username"]
	// fmt.Println(username)

	// // 删除(Delete) delete(map_obj, key)
	// delete(userinfo, "age")
	// fmt.Println(userinfo)

	// // 创建一个元素为map类型数据的切片
	// var userinfo = make([]map[string]string, 3, 3)
	// if userinfo[0] == nil {
	// 	userinfo[0] = make(map[string]string)
	// 	userinfo[0]["age"] = "20"
	// 	userinfo[0]["username"] = "张三"
	// }
	// if userinfo[1] == nil {
	// 	userinfo[1] = make(map[string]string)
	// 	userinfo[1]["age"] = "30"
	// 	userinfo[1]["username"] = "李四"
	// }
	// fmt.Println(userinfo)

	// for i, v := range userinfo {
	// 	for k, v := range v {
	// 		fmt.Printf("%v - key:%v, value:%v\n", i, k, v)
	// 	}
	// }

	var userinfo []map[string][]string
	userinfo = append(userinfo, map[string][]string{"爱好": []string{"篮球", "看书"}})
	userinfo = append(userinfo, map[string][]string{"爱好": []string{"唱歌", "跳舞"}})
	fmt.Println(userinfo)

	// // 创建value类型为切片的map类型数据
	// var userinfo = make(map[string][]string)
	// userinfo["hobby"] = []string{"篮球", "电影"}
	// fmt.Println(userinfo)

	// // map数据类型按照key值排序
	// // 1. 取key切片并排序
	// // 2. 根据key切片顺序获取value
	// map1 := make(map[int]int, 5)
	// map1[5] = 5
	// map1[6] = 6
	// map1[2] = 2
	// map1[9] = 9
	// map1[134] = 134
	// var keySlice = []int{}
	// for k := range map1 {
	// 	keySlice = append(keySlice, k)
	// }
	// fmt.Println(keySlice)
	// sort.Ints(keySlice)
	// for _, v := range keySlice {
	// 	fmt.Printf("%v ", v)
	// }

	// var teststr = "how do you do how do you do"
	// var strlist = strings.Split(teststr, " ")

	// var wordmap = map[string]int{}

	// for _, v := range strlist {
	// 	_, exists := wordmap[v]
	// 	if exists {
	// 		wordmap[v]++
	// 	} else {
	// 		wordmap[v] = 1
	// 	}
	// }

	// for k, v := range wordmap {
	// 	fmt.Printf("%v=%v ", k, v)
	// }
}
